iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
Software Development

30天快速打造Python資料結構&演算法邏輯刷爆LeetCode系列 第 8

DAY 8 「冒泡排序 (Bubble Sort)」最快理解的排序用Python程式碼撰寫~

  • 分享至 

  • xImage
  •  

最簡單得排序演算法思維邏輯~

鬆口氣進入一個容易了解的演算排序~~通過反覆交換相鄰的元素,使較大的元素逐漸往右移動,較小的元素逐漸往左移動,從而將最大(或最小)的元素冒泡到最右端(或最左端)像氣泡在水中上升一樣
/images/emoticon/emoticon01.gif白話來說簡單易理解的旁邊兩倆比較按順序交換排序用於小型列表,但列表較大會慢的排序算法~~

  • 最佳情況O(n)/最壞情況O(n^2)完全倒序/平均情況O(n^2)時間複雜度
  • 穩定排序(相同元素的相對位置每次排序完全一致)

進入迴圈:使用兩個嵌套的迴圈,外迴圈從列表的第一個元素遍歷到倒數第二個元素
比較相鄰元素:在內迴圈中,比較相鄰的兩個元素
Step1: 第一次遍歷(外迴圈)用第一個元素、第二個...再到最後倒數第二個元素
Step2: (內迴圈兩兩相比)進行交換:每一次外回圈的第一個元素大於其後一個元素,則進行交換

重複遍歷:繼續重複上述步驟,直到沒有進行過交換的元素,表示列表已經排序完成。
=> 第一次遍歷:
比較相鄰的元素,如果左邊的元素大於右邊的元素,則交換它們。
遍歷完一輪後,最大的元素將被移至列表的最右邊。
過程:[34, 25, 12, 22, 11, 64, 90]
=> 第二次遍歷:
再次遍歷列表,重複上述交換步驟。
這一次,第二大的元素會被移至列表的右邊第二個位置。
過程:[25, 12, 22, 11, 34, 64, 90]
重複以上步驟直到列表排序完成。
=> 過程:[12, 22, 11, 25, 34, 64, 90] (第三次遍歷)
=> 過程:[12, 11, 22, 25, 34, 64, 90] (第四次遍歷)
=> 過程:[11, 12, 22, 25, 34, 64, 90] (第五次遍歷)
=> 最終,列表 [11, 12, 22, 25, 34, 64, 90] 是按照升序排序完成。

def bubble_sort(arr):
    n = len(arr)
    # Step1: 第一次遍歷(外迴圈)用第一個元素、第二個...再到最後倒數第二個元素
    for i in range(n):
        # 最後 i 個元素已經排序完成,不需再檢查
        # Step2: (內迴圈兩兩相比)進行交換:每一次外回圈的第一個元素大於其後一個元素,則進行交換
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                # 如果前一個元素大於後一個元素,進行交換
                arr[j], arr[j+1] = arr[j+1], arr[j]


my_list = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(my_list)

print("排序後的列表:", my_list)

上一篇
DAY 7 「合併排序 (Merge Sort)」簡簡單單教會你Python程式碼撰寫~
下一篇
DAY 9 「插入排序 (Insertion Sort)」類似於撲克牌整理的Python程式碼撰寫~
系列文
30天快速打造Python資料結構&演算法邏輯刷爆LeetCode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言